#include <REGX52.H>

/*定时器中断函数模板

void Timer0_Routine() interrupt 1	//interrupt是一个关键字
{
	static unsigned int T0Count = 0;
	T0Count++;
	if (T0Count >= 500){//在这里设置计时(ms)
		T0Count = 0;
		
		//这里 添加/编辑
		//P2_0 = ~P2_0;
		
	}
	TL0 = 0x66;		//设置定时初始值
	TH0 = 0xFC;		//设置定时初始值
	
//	//然后计数器溢出由65535--> 0  而不是我们想要的从64535开始计时,所以
//	//重新赋初值
//	TH0 = 64535 / 256;//低8位的取值
//	TL0 = 64535 % 256;//高8位的取值
}
*/

/**
  * @brief 定时器0初始化  1ms @11.0592
  * @param 
  * @retval 无
  */
void Timer0Init(void)		//1毫秒@11.0592MHz
{
	TMOD &= 0xF0;		//设置定时器模式
	TMOD |= 0x01;		//设置定时器模式
	TL0 = 0x66;		//设置定时初始值
	TH0 = 0xFC;		//设置定时初始值
	TF0 = 0;		//清除TF0标志
	TR0 = 1;		//定时器0开始计时
	
	ET0 = 1;//T0的溢出中断允许位。ET0=1，允许T0中断；ET0=0禁止T0中断。
	EA = 1;//CPU的总中断允许控制位，EA=1，CPU开放中断，EA=0，CPU屏蔽所有的中断申请。	EA的作用是使中断允许形成两级控制。即各中断源首先受EA控制;其次还受各中断源自 己的中断允许控制位控制。
	PT0 = 0;
}

/*定时器中断函数模板

void Timer0_Routine() interrupt 1	//interrupt是一个关键字
{
	static unsigned int T0Count = 0;
	T0Count++;
	if (T0Count >= 500){
		T0Count = 0;
		//点亮第一个LED灯
		P2_0 = ~P2_0;
		
	}
	
	TL0 = 0x66;		//设置定时初始值
	TH0 = 0xFC;		//设置定时初始值
	
//	//然后计数器溢出由65535--> 0  而不是我们想要的从64535开始计时,所以
//	//重新赋初值
//	TH0 = 64535 / 256;//低8位的取值
//	TL0 = 64535 % 256;//高8位的取值
}
*/




//下面的没有用,(上课讲的过程)

/**
  * @brief 配置定时器中断系统
  * @param null
  * @retval null
  */

//void Timer0_Init(){
////定时器/计数器工作模式寄存器TMOD
//	
//	//TMOD = 0x01;//使用内部的定时器,且工作在16位定时器/计数器，TL1、TH1全用,范围0-65535
//	/*
//	但是上面的代码有缺陷: (如果只使用第0计时器没有问题),如果同时使用多个计时器,这种赋值方式会把前面的定时器配置覆盖
//	*/
//	
//	/*
//	TIMER1 定时器1		TIMER0 定时器0
//	 0    0   0   0      0   0   0   1
//	GATE C/T  M1  M0   GATE C/T  M1  M0 
//	*/

////	与或式赋值法
//	TMOD = TMOD & 0xF0;	//把TMOD的低四位清零,高四位保持不变
//	// 与1111 0000 按位与运算
//	/* 例: 1010 0011 
//		1010 0011 
//	&	1111 0000
//	--------------
//		1010 0000
//	1与任意的值作与运算 都得原值
//	*/	
//	TMOD = TMOD | 0x01;//把TMOD的最低位置1,高四位保持不变
//	/* 例: 1010 0000
//	
//		1010 0000
//	|	0000 0001
//	--------------	
//		1010 0001
//	*/
//	
//	
////定时器/计数器控制寄存器TCON (可位寻址)

//	TF0 = 0;// T0/T1被允许计数以后，从初值开始加1计数。当最高位产生溢出时由硬件置“1”TF0，向CPU请求中断，一直保持到CPU响应中断时，由硬件清 “0”TF0（TF0也可由程序查询清“0”）。
//	TR0 = 1;
//	
//	/*
//	0~65535		当晶振位12M时,每隔1us计数加一,即65535us
//	当计数器位64535时,离计数器溢出差值1000,即1ms
//	在16位工作模式下,两个八位计数器是独立的
//	*/
//	TH0 = 64535 / 256;//低8位的取值
//	TL0 = 64535 % 256;//高8位的取值
//	
////	中断系统开关
//	ET0 = 1;//T0的溢出中断允许位。ET0=1，允许T0中断；ET0=0禁止T0中断。
//	EA = 1;//CPU的总中断允许控制位，EA=1，CPU开放中断，EA=0，CPU屏蔽所有的中断申请。	EA的作用是使中断允许形成两级控制。即各中断源首先受EA控制;其次还受各中断源自 己的中断允许控制位控制。
//	PT0 = 0;
//}